export default {
    data() {
        return {
            // 设置属性
            mixinViewModuleOptions: {
                activatedIsNeed: true, // 此页面是否在激活（进入）时，调用查询数据列表接口？
                getDataListURL: '', // 数据列表接口，API地址
                getDataListIsPage: true, // 数据列表接口，是否需要分页？
                deleteURL: '', // 删除接口，API地址
                deleteIsBatch: true, // 删除接口，是否需要批量？
                deleteIsBatchKey: 'id', // 删除接口，批量状态下由那个key进行标记操作？比如：pid，uid...
                exportURL: '' // 导出接口，API地址
            },
            // 默认属性
            dataForm: {}, // 查询条件
            dataList: [], // 数据列表
            order: '', // 排序，asc／desc
            orderField: '', // 排序，字段
            page: 1, // 当前页码
            limit: 10, // 每页数
            total: 0, // 总条数
            dataListLoading: false, // 数据列表，loading状态
            dataListSelections: [], // 数据列表，多选项
            addOrUpdateVisible: false // 新增／更新，弹窗visible状态
        }
    },
    activated() {
        if (this.mixinViewModuleOptions.activatedIsNeed) {
            this.getDataList()
        }
    },
    created() {
        if (this.mixinViewModuleOptions.activatedIsNeed) {
            this.getDataList()
        }
    },
    methods: {
        // 获取数据列表
        getDataList() {
            this.dataListLoading = true
            this.$http
                .post(this.mixinViewModuleOptions.getDataListURL, {
                    params: {
                        order: this.order,
                        orderField: this.orderField,
                        page: this.mixinViewModuleOptions.getDataListIsPage ? this.page : null,
                        limit: this.mixinViewModuleOptions.getDataListIsPage ? this.limit : null,
                        ...this.dataForm
                    }
                })
                .then(res => {
                    // console.log(res.data)
                    this.dataList = this.mixinViewModuleOptions.getDataListIsPage ? res.data : res
                    this.total = this.mixinViewModuleOptions.getDataListIsPage ? res.total : 0
                    this.dataListLoading = false
                })
                .catch(() => {
                    this.dataList = []
                    this.total = 0
                    this.dataListLoading = false
                })
        },
        // 多选
        dataListSelectionChangeHandle(val) {
            this.dataListSelections = val
        },
        // 排序
        dataListSortChangeHandle(data) {
            if (!data.order || !data.prop) {
                this.order = ''
                this.orderField = ''
                return false
            }
            this.order = data.order.replace(/ending$/, '')
            this.orderField = data.prop.replace(/([A-Z])/g, '_$1').toLowerCase()
            this.getDataList()
        },
        // 分页, 每页条数
        pageSizeChangeHandle(val) {
            this.page = 1
            this.limit = val
            this.getDataList()
        },
        // 分页, 当前页
        pageCurrentChangeHandle(val) {
            this.page = val
            this.getDataList()
        },
        // 新增 / 修改
        addOrUpdateHandle(id) {
            this.addOrUpdateVisible = true
            this.$nextTick(() => {
                this.$refs.addOrUpdate.dataForm.id = id
                this.$refs.addOrUpdate.init()
            })
        },
        // 删除
        deleteHandle(id) {
            if (
                this.mixinViewModuleOptions.deleteIsBatch &&
                !id &&
                this.dataListSelections.length <= 0
            ) {
                return this.$message({
                    message: '请至少选中一条记录',
                    type: 'warning',
                    duration: 500
                })
            }
            this.$confirm('是否确认删除记录', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
            })
                .then(() => {
                    this.$http
                        .post(this.mixinViewModuleOptions.deleteURL, {
                            params: this.mixinViewModuleOptions.deleteIsBatch
                                ? {
                                      data: id
                                          ? [id]
                                          : this.dataListSelections.map(
                                                item =>
                                                    item[
                                                        this.mixinViewModuleOptions.deleteIsBatchKey
                                                    ]
                                            )
                                  }
                                : {}
                        })
                        .then(() => {
                            this.$message({
                                message: '执行成功',
                                type: 'success',
                                duration: 500,
                                onClose: () => {
                                    this.getDataList()
                                }
                            })
                        })
                        .catch(() => {})
                })
                .catch(() => {})
        }
    }
}
